package lesson11;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Test01 {
    public static void main(String[] args) {
        // ArrayList和LinkedList区别：
        // 它们都是List接口下的集合类，拥有相同的方法
        // ArrayList是数组结构的集合，检索效率更高，但往中间和前面添加删除元素效率低
        // LinkedList是双向链表式结构的集合，检索效率低，但往中间和前面添加删除元素效率高

        // ArrayList和Vector区别：
        // 它们都是数组结构的集合类，拥有相同的方法
        // ArrayList是JDK1.2的集合类，它是线程不安全的，因此效率略高
        // Vector是JDK1.0的集合类，它是线程安全的，因此效率略低

        // 使用频率最高的List接口下的集合类是ArrayList
//        ArrayList arrayList = new ArrayList();
//        arrayList.add(100);
//        arrayList.add("heloo");
//        arrayList.add(new Student("张飞",20,"男"));
//
//        for(int i = 0;i < arrayList.size();i++){
//            System.out.println(arrayList.get(i));
//        }
//
//        // 使用迭代器来遍历集合
//        Iterator iterator = arrayList.iterator();
//        while(iterator.hasNext()){
//            System.out.println(iterator.next());
//        }
//
//        // 迭代器的语法糖：for - in
//        for(Object obj : arrayList){
//            System.out.println(obj);
//        }

        // HashSet和TreeSet区别：
        // HashSet和TreeSet都是实现Set接口的集合，它们拥有相同的方法
        // HashSet不能自定义排序，它内部会经过hash算法的计算将元素排序，效率较高
        // TreeSet可以自定义排序，效率较低

        // 主要使用的Set接口下的集合类是HashSet
        HashSet hashSet = new HashSet();
        hashSet.add(100);
        hashSet.add("hello");
        hashSet.add(500.25);
        hashSet.add(new Student("张飞",20,"男"));
        hashSet.add(100);

        Iterator iterator = hashSet.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

        for(Object obj : hashSet){
            System.out.println(obj);

        }
        ArrayList newArrayList = new ArrayList();
        newArrayList.addAll(hashSet);
        for (Object obj : newArrayList){
            System.out.println(obj);
        }
        System.out.println(newArrayList.get(0));


    }
}
